perm filename ARMFN[SYS,HE]3 blob sn#016517 filedate 1972-12-20 generic text, type T, neo UTF8
00100	HOPEN:				;OPENS THE HAND TO SET POINT
00200		TRNN HCL
00300		JRST[	MOVEI TAC,=480	;GO HERE FIRST TIME
00400			MOVEM TAC,HCNT	;MAX TIME TO SERVO THERE
00500			ADDI TAC,=60
00600			MOVEM TAC,COUNT
00700			HRLZ AC,@STKPTR	;REQUIRED OPENING
00800			MOVE MQ,[3.7]
00900			CAML AC,MQ
01000			MOVE AC,MQ	;NOT GREATER THAN 2.5
01100			MOVEM AC,RSET	;REQUIRED FINAL SET POINT
01200			PUSHJ P,HEAD	;READS THE HAND
01300			MOVE AC,HAND	;AND STORE IT HERE
01400			MOVEM AC,SET	;DYNAMIC SET POINT
01500			TRZ STCH	;TURN OFF TOUCH AND SAVE STATE
01600			MOVE TAC,[0.06]
01700			CAML AC,RSET
01800			MOVN TAC,TAC
01900			MOVEM TAC,DIR	;CHANGE OF SET POINT PER JIFFY
02000			TRO HCL		;SO THAT WE DON'T COME BACK HERE
02100			JUMPGE TAC,NXTJIF
02200			FSC TAC,-1	;IF CLOSING GO SLOWER
02300			MOVEM TAC,DIR
02400			SKIPE SOTCH	;AND RESTORE TOUCH
02500			TRO STCH
02600			JRST NXTJIF]
02700	HSU:	PUSHJ P, HEAD		;INCREMENTS SETPOINT AND SETS D/A
02800					;LEAVES ARM DATAO IN TAC
02900	IFE HANDWORK <
03000		JRST NEXT
03100	>
03200		SOSGE HCNT
03300		JRST[	MOVEI AC,HTERR
03400			MOVEM AC,TRAJER
03500			POP P,AC
03600			JRST TOFF]
03700		SKIPE DIR
03800		JRST DAW		;IF NOT AT FINAL SET DRIVE ANYWAY
03900		MOVE AC,RSET
04000		FSBR AC,HAND		;CHECK ERROR TOLERANCE
04100		MOVM AC,AC
04200		FSBR AC,[0.05]
04300		JUMPLE AC,[	TRZ HCL
04400				TDZ DATWD,HANDAT
04500				JRST NEXT]
04600	DAW:	
04700	IFN TRACK,<SKIPN WALK>
04800		DATAO ARM,DATWD		;DRIVE HAND
04900		JRST NXTJIF
05000	
     

00100	HCLOSE:
00200		TRNN HCL		;ONLY ONCE
00300		JRST[	TRZ STCH	;TURN OFF TOUCH AND SAVE STATE
00400			MOVEI TAC,=240
00500			MOVEM TAC,COUNT
00600			HRLZ AC,@STKPTR	;MINIMUN OPENING
00700			MOVEM AC,MINDST
00800			PUSHJ P,HEAD	;READ HAND
00900			MOVE AC,HAND
01000			MOVEM AC,SET
01100			MOVE TAC,[-0.10]
01200			MOVEM TAC,DIR	;CHANGE OF SET POINT PER JIFFY
01300			MOVSI AC,(4.0)
01400			MOVNM AC,RSET	;FINAL SET POINT -1 SO AS TO SQUEEZE
01500			TRO HCL
01600			JRST NXTJIF]
01700	BB:	PUSHJ P,HEAD
01800	IFE HANDWORK <
01900		JRST ER2
02000	>
02100	IFN TRACK,<SKIPN WALK>
02200		DATAO ARM,DATWD		;DRIVE HAND
02300		MOVE AC,HERR
02400		CAMG AC,[0.50]
02500		JRST NXTJIF		;IF ERROR LESS THAN 1 KEEP ON
02600	ER2:	TRZ HCL
02700		TDZ DATWD,HANDAT
02800		SKIPE SOTCH		;RESTORE TOUCH
02900		TRO STCH
03000		MOVE AC,MINDST
03100	IFE USER,<CAMG AC,HAND>
03200		JRST NEXT
03300		MOVEI 1,GRASER		;IF LESS THAN MINOPENING GIVE ERROR
03400		MOVEM 1,TRAJER
03500		POP P,1
03600		JRST  TOFF
03700	
     

00100	HEAD:	MOVEI K,HANDCHA
00200	IFE USER,<
00300		PUSHJ P,PREAD		;READ HAND CHANNEL
00400		LDB AC,SNUM
00500		ANDI DACVAL,7777
00600		ADDI AC,(DACVAL)	;ADD ALL THREE READINGS TOGETHER
00700		FSC AC,220
00800		FMPR AC,HSCALE
00900		FADR AC,HOFF
01000		MOVEM AC,HAND		;OPENING IN INCHES
01100	>
01200	IFN USER,<
01300		MOVE AC,HAND
01400		FADR AC,DIR
01500		SKIPG AC
01600		SETZ AC,
01700		MOVEM AC,HAND
01800	>
01900	IFN REPORT,<
02000		PUSH DATA,[<SIXBIT/HAND/>+1]
02100		PUSH DATA,HAND
02200	>
02300		SKIPN TAC,DIR
02400		JRST[	MOVE TAC,SET
02500			JRST GOTHER]
02600		FMPR TAC,TDF
02700		FADRB TAC,SET 		;INCREMENT SET POINT
02800		FSBR TAC,RSET	;NEGATIVE REMAINS TO GO
02900		FMPR TAC,DIR
03000		JUMPGE TAC,[	MOVE TAC,RSET	;GOT THERE
03100				MOVEM TAC,SET
03200				SETZM DIR
03300				JRST GOTHER]
03400		MOVE TAC,SET
     

00100	GOTHER:	FSBR AC,TAC		;HAND SERVO
00200		EXCH AC,HERR
00300		FSBR AC,HERR
00400		FMPR AC,KVH
00500		MOVN TAC,HERR
00600		FMPR TAC,KEH
00700		FADR AC,TAC
00800		TDO DATWD,[HANDAT:XWD 4000,60]
00900		JUMPGE AC,.+2
01000		TRZ DATWD,40
01100		MOVM AC,AC
01200		FIX AC,211000
01300		CAILE AC,776000
01400		MOVEI AC,776000
01500		TRC AC,400000
01600		HRLI AC,6
01700	IFN DEB<
01800		MOVEM AC,HANDAW
01900	>
02000	IFN TRACK,<SKIPN WALK>
02100		DATAO WIDTH,AC
02200		POPJ P,
02300	HSCALE:	1.32
02400	HOFF:	-0.81
02500	DIR:	0			;CHANGE OF SETPOINT PER JIFFY
02600	SET:	0			;DYNAMIC SET POINT
02700	RSET:	0			;FINAL SET POINT
02800	MINDST:	0			;MIN OPENING FOR CLOSE
02900	HERR:	0			;HAND POSITION ERROR
03000	KEH:	5.0			;ERROR GAIN
03100	KVH:	10.0			;VELOCITY GAIN
03200	IFN DEB<
03300	HANDAW:	0
03400	>
03500	
     

00100	PLACE:				;PLACE HAND ON TABLE
00200		TRNN DROP		;ONLY COME HERE ONCE
00300		JRST[	TRO DROP+RUN+VZERO
00400			MOVEI 1,=180
00500			MOVEM 1,COUNT
00600			HRRE 1,@STKPTR
00700			ADDI 1,(CBUF)
00800			HRLI 1,(1)
00900			HRRI 1,DELTH
01000			BLT 1,DELTH+5	;CHANGE OF THETA PER JIFFY
01100			MOVEI 1,=12
01200			MOVEM 1,HCNT	;DON'T STOP FOR THE FIRST 12 JIFFIES
01300			MOVE DATWD,[770000252502]
01400			HRRZM DATWD,FBI
01500			JRST NXTJIF]
01600		SOSL HCNT
01700		JRST NXTJIF
01800	IFN USER,<JRST PLACED>
01900	EXL:	MOVE AC,ET0+1
02000		FADR AC,ET0P+1
02100		MOVM AC,AC		;AVERAGE OF LAST TWO JOINT 2 ERRORS
02200		CAML AC,PLER
02300		JRST PLACED
02400		JRST NXTJIF
02500	PLACED:	JRST RUDONE
02600	PLER:	1.2
02700	
     

00100	NUDGE:	HRRE 1,@STKPTR		;DIFFERENTIAL CHANGE IN POSITION
00200		ADDI 1,(CBUF)
00300		HRLI 1,(1)
00400		HRRI 1,DELTH
00500		BLT 1,DELTH+5		;CHANGE AND NUMBER OF TICKS TO DO IT
00600		HRRE 1,@STKPTR
00700		ADDI 1,6(CBUF)
00800		MOVE DATWD,14(1)
00900		HRRZM DATWD,FBI
01000		MOVE 2,15(1)
01100		IMULI 2,=16667
01200		MOVEM 2,NTICKS
01300		ADDI 2,=60
01400		MOVEM 2,COUNT
01500		HRLI 1,(1)
01600		HRRI 1,CI
01700		BLT 1,CII+5
01800		MOVEI I,5
01900	NCCA:	MOVE AC,MOTARM(I)
02000		FADRM AC,CII(I)
02100		SOJGE I,NCCA
02200		TRO INCREM+RUN+VZERO+NUL
02300		SETZM TICKS
02400		SETZM FUNCT
02500		MOVEI I,5
02600	SGL:	TDNE DATWD,BMASK(I)
02700		TDO DATWD,BMASK(I)
02800		SOJGE I,SGL
02900		JRST NXTJIF
03000	
03100	
03200	STOP:	HRRE 1,@STKPTR
03300		ADDI 1,(CBUF)
03400		HRLI 1,(1)
03500		HRRI 1,STQ
03600		BLT 1,STQ+5
03700		MOVEI I,5
03800		SETZ AC,
03900	DSTQ:	MOVE TAC,STQ(I)
04000		FDVR TAC,F0(I)
04100		MOVM MQ,TAC
04200		CAMGE MQ,[0.2]
04300		SETZB TAC,STQ(I)
04400		MOVEM TAC,STQ(I)
04500		FMPR TAC,TAC
04600		FADR AC,TAC
04700		SOJGE I,DSTQ
04800		MOVEM AC,SDTQ
04900		SETZM ASTPP
05000		TRO STP
05100		JRST NEXT
05200	
     

00100	SAVE:	HRRE K,@STKPTR
00200		ADDI K,(CBUF)
00300		MOVE TAC,(K)
00400		JUMPLE TAC,.+2
00500		CAILE TAC,12
00600		JRST[	MOVEI TAC,SAVERR
00700			MOVEM TAC,TRAJER
00800			JRST TOFF]
00900		IMULI TAC,3
01000		ADDI TAC,DTHS
01100		MOVEI J,2
01200	SAL1:	MOVEI I,5
01300		SOJ TAC,
01400		SETZ AC,
01500	SAL2:	AOJ K,
01600		MOVE MQ,DTH(I)
01700		FMPR MQ,(K)
01800		FADR AC,MQ
01900		SOJGE I,SAL2
02000		MOVEM AC,(TAC)
02100		SOJGE J,SAL1
02200		JRST NEXT
02300	
02400	RESTORE:HRRE K,@STKPTR
02500		ADDI K,(CBUF)
02600		MOVE TAC,(K)
02700		JUMPLE TAC,.+2
02800		CAILE TAC,12
02900		JRST[	MOVEI TAC,SAVERR
03000			MOVEM TAC,TRAJER
03100			JRST TOFF]
03200		IMULI TAC,3
03300		ADDI TAC,DTHS-1
03400		ADDI K,22
03500		MOVEI I,5
03600	REL1:	MOVE AC,(TAC)
03700		FMPR AC,(K)
03800		MOVE MQ,-1(TAC)
03900		FMPR MQ,-1(K)
04000		FADR AC,MQ
04100		MOVE MQ,-2(TAC)
04200		FMPR MQ,-2(K)
04300		FADR AC,MQ
04400		FADRM AC,DELTH(I)
04500		SUBI K,3
04600		SOJGE I,REL1
04700		JRST NEXT
04800	
04900	
05000	SET.ARM:HRRE I,@STKPTR
05100		ADDI I,(CBUF)
05200		HRRE AC,(I)
05300		SOJL AC,.+2
05400		CAIL AC,11
05500		JRST[	MOVEI TAC,SAVERR
05600			MOVEM TAC,TRAJER
05700			JRST TOFF]
05800		IMULI AC,3
05900		HRRI TAC,DTHS(AC)
06000		HRRZI MQ,2(TAC)
06100		HRLI TAC,1(I)
06200		BLT TAC,(MQ)
06300		JRST NEXT
06400	
06500	SLAVE:	MOVEI K,15B23
06600		MOVEI I,3
06700	SLRP:	PUSHJ P,PREAD
06800		LDB AC,SNUM
06900		SUBI AC,4000
07000		MOVEM AC,POT(I)
07100		SOJGE I,SLRP
07200		TRNN HCL
07300		JRST[	TRO RUN+VZERO
07400			MOVE DATWD,[770000252502]
07500			HRRZM DATWD,FBI
07600			TRO HCL
07700			MOVEI AC,=6000
07800			MOVEM AC,COUNT
07900			MOVEI I,3
08000		SLZL:	MOVE AC,POT(I)
08100			MOVEM AC,POTZ(I)
08200			SOJGE I,SLZL
08300			JRST .+1]
08400		MOVEI I,3
08500	SLCH:	MOVE AC,POT(I)
08600		SUB AC,POTZ(I)
08700		JUMPGE AC,[SUBI AC,400
08800			JUMPGE AC,SLST
08900			JRST SLZA]
09000		ADDI AC,400
09100		JUMPL AC,SLST
09200	SLZA:	SETZ AC,
09300	SLST:	FSC AC,213
09400		MOVEM AC,POT(I)
09500		SOJGE I,SLCH
09600		SKIPE POT+3
09700		JRST[	TRZ HCL
09710			TRO FINAL
09720			SETZM FUNCT
09800			JRST NXTJIF]
09900		HRRE K,@STKPTR
10000		ADDI K,21(CBUF)
10100		MOVEI I,5
10200	SLL2:	MOVE AC,POT+2
10300		FMPR AC,(K)
10400		MOVE MQ,POT+1
10500		FMPR MQ,-1(K)
10600		FADR AC,MQ
10700		MOVE MQ,POT
10800		FMPR MQ,-2(K)
10900		FADR AC,MQ
11000		FMPR AC,TDF
11100		FADRM AC,DTH(I)
11200		SUBI K,3
11300		SOJGE I,SLL2
11400		JRST NXTJIF
11500	POT:	BLOCK 4
11600	POTZ:	BLOCK 4
11700	
     

00100	CENTER:	TRNN HCL
00200		JRST[	TRO HCL
00300			MOVEI TAC,=600
00400			MOVEM TAC,COUNT
00500			MOVSI AC,(4.0)
00600			MOVNM AC,RSET
00700			PUSHJ P,HEAD
00800			MOVE AC,SET
00900			TRZ STCH
01000			MOVE TAC,[-0.02]
01100			MOVEM TAC,DIR
01200			JRST NXTJIF]
01300		PUSHJ P,HEAD
01400	IFE HANDWORK,<JRST ER2>
01500		DATAO ARM,DATWD
01600		TRNN DROP
01700		JRST[	MOVEI I,1
01800		CFT:	MOVE AC,OBS(I)
01900			JUMPG AC,[SETZM TOT
02000				SKIPN I
02100				AOS TOT
02200				TRO DROP+RUN+VZERO
02300				MOVE TAC,[-0.01]
02400				MOVEM TAC,DIR
02500				HRRE TAC,@STKPTR
02600				ADDI TAC,(CBUF)
02700				MOVE AC,(TAC)
02800				MOVEM AC,MINDST
02900				AOJ TAC,
03000				MOVEI I,DELTH
03100			OT:	MOVE AC,(TAC)
03200				FMPR AC,[0.005]
03300				SKIPN TOT
03400				MOVNS AC
03500				MOVEM AC,(I)
03600				AOJ TAC,
03700				CAIGE I,DELTH+5
03800				AOJA I,OT
03900				MOVE TAC,[XWD 770000, 252500]
04000				HRRZM TAC,FBI
04100				IOR DATWD,TAC
04200				MOVSI AC,(1.0)
04300				MOVEM AC,TDF
04400				MOVEI I,4
04500			GETGO:	PUSHJ P,NXTH
04600				SOJGE I,GETGO
04700				JRST NXTJIF]
04800			SOJGE I,CFT
04900			JRST NXTJIF]
05000		MOVE TAC,TOT
05100		SKIPG OBS(TAC)
05200		JRST NXTJIF
05300		TRZ DROP+RUN+FINAL
05400		PUSHJ P,SETSET
05500		TDZ DATWD,[XWD 770000,252500]
05600		MOVE TAC,DIR
05700		FSC TAC,3
05800		MOVEM TAC,DIR
05900		MOVEI TAC,2
06000		MOVEM TAC,FUNCT
06100		JRST NXTJIF]
06200	TOT:	0
06300	
06400	WOBBLE:	HRLZ AC,@STKPTR
06500		MOVEM AC,WOBMAG
06600		MOVEI AC,1
06700		MOVEM AC,WOBCNT+2
06800		MOVEM AC,WOBCNT+1
06900		MOVEI AC,6
07000		MOVEM AC,WOBCNT
07100		MOVN AC,WOBMAG
07200		FADRM AC,DTH+3
07300		TRO WOB
07400		JRST NEXT
07500	WOBMAG:	0
07600	WOBCNT:	BLOCK 3
07700	SIN:	 0.0
07800		 0.30902
07900		 0.58779
08000		 0.80902
08100		 0.95106
08200		 1.0
08300		 0.95106
08400		 0.80902
08500		 0.58779
08600		 0.30902
08700		 0.0
08800		-0.30902
08900		-0.58779
09000		-0.80902
09100		-0.95106
09200		-1.0
09300		-0.95106
09400		-0.80902
09500		-0.58779
09600		-0.30902
     

00100	SEARCH:	SETZM XSEL
00200		SETZM SCOUNT
00300		SETZM TCOUNT
00400		HRRE 1,@STKPTR
00500		ADDI 1,(CBUF)
00600		HRLI 1,(1)
00700		HRRI 1,XDEL
00800		BLT 1,YDEL+5
00900		SETZM SDTH
01000		MOVE AC,[XWD SDTH,SDTH+1]
01100		BLT AC,SDTH+5
01200		JRST NEXT
01300	
01400	AOJI:	MOVEI I,5
01500		MOVE K,SCOUNT
01600		SOSG J,TCOUNT
01700		JRST[	SKIPN XSEL
01800			AOS K,SCOUNT
01900			SETCMM XSEL
02000			MOVEI J,(K)
02100			MOVEM J,TCOUNT
02200			JRST .+1]
02300		SKIPE XSEL
02400		JRST[IX:MOVE AC,XDEL(I)
02500			TRNN K,1
02600			MOVN AC,AC
02700			FADRB AC,SDTH(I)
02800			FADRM AC,DELTH(I)
02900			SOJGE I,IX
03000			JRST NJ]
03100	IY:	MOVE AC,YDEL(I)
03200		TRNN K,1
03300		MOVN AC,AC
03400		FADRB AC,SDTH(I)
03500		FADRM AC,DELTH(I)
03600		SOJGE I,IY
03700	NJ:	HRRE TAC,@STKPTR
03800		ADD TAC,STKPTR
03900		SOJ TAC,
04000		HRRM TAC,STKPTR
04100		JRST NEXT
04200	
04300	TCOUNT:	0
04400	SCOUNT:	0
04500	XSEL:	0
04600	XDEL:	BLOCK 6
04700	YDEL:	BLOCK 6
04800	SDTH:	BLOCK 6
04900	
     

00100	REFLEX:	MOVEI I,1
00200		MOVEI K,65B23
00300	IFN USER,<POPJ P,>
00400	REX:	PUSHJ P,PREAD
00500		LDB AC,[POINT 12,DACVAL,11]
00600		ADD AC,REF(I)
00700		MOVEM AC,OBS(I)
00800	RMOR:	SOJGE I,REX
00900		TRNN STCH
01000		POPJ P,
01100		MOVEI I,1
01200	SIT:	MOVE AC,OBS(I)
01300		JUMPG AC,[	LSH I,3
01400				IORI I,TOUCH
01500				MOVEM I,TRAJER
01600				POP P,I
01700				JRST TOFF]
01800		SOJGE I,SIT
01900		POPJ P,
02000	
02100	REF:	-1000
02200		-1000
02300		BLOCK 4
02400	OBS:	BLOCK 2
02500	SOTCHS:	0
02600	
02700	SETCH:	MOVE AC,SOTCH
02800		MOVEM AC,SOTCHS
02900		HRLE AC,@STKPTR
03000		MOVEM AC,SOTCH
03100		JUMPE AC,NEXT
03200		TRO STCH
03300		JRST NEXT
03400	
     

00100		XLIST
00200		LIT
00300		LIST
00400		END START